草庐IT

c++ - gcc 和 libstdc++ 向前兼容

全部标签

c++ - 如果删除一个对象,究竟会发生什么? (gcc)(当双删除崩溃时?)

请注意,我不想用我的问题解决任何问题-我在考虑事情发生的概率,因此想知道一些事情:如果删除对象并使用gcc作为编译器,究竟会发生什么?上周我正在调查一次崩溃,其中竞争条件导致对象被双重删除。崩溃发生在调用对象的虚析构函数时,因为指向虚函数表的指针已经被覆盖。第一次delete是否覆盖了虚函数指针?如果不是,那么第二次删除是否安全,只要在此期间没有分配新的内存?我想知道为什么以前没有识别出我遇到的问题,唯一的解释是在第一次删除期间虚函数表被立即覆盖,或者第二次删除没有崩溃。(第一个意味着如果发生“竞争”,崩溃总是发生在相同的位置-第二个,当竞争发生时通常什么也不会发生-只有当第三个线程覆

c++ - 是否在兼容模式下运行的程序

是否有我可以调用的C++.NET函数来检测我的程序是否在兼容模式下运行?如果没有,有人可以告诉我一个代码吗?谢谢。例如:程序加载兼容模式检查如果为真则退出否则运行 最佳答案 来自其他论坛Afterafewgooglesearcheswentinvain,Idecidedtoexperimentmyself.Ifoundthatthecompatibilitysettingsforeachexecutablearestored-asIthoughtitwouldbe-inthewindowsregistry.Thekeywhereth

c++ - clang 3.3 和 GCC 4.7 const v 的 constexpr

我刚刚尝试在Ubuntu13.04上使用带有GCC4.7.3标准库头文件的clang3.3编译大量代码。这一切都很顺利,除了一个问题。这段代码已经在这台机器上用标准的Ubuntuclang3.2包编译,所以我假设这是clang3.3编译器的一些变化。与使用复杂header的const和constexpr有关的问题。特别是复杂类型具有以下代码块#ifdef__GXX_EXPERIMENTAL_CXX0X__//_GLIBCXX_RESOLVE_LIB_DEFECTS//DR387.std::complexover-encapsulated.constexprdoublereal(){re

c++ - 使用 GCC 或/和 IAR 编译时如何禁用 double 学?

我的嵌入式C代码在具有单精度FPU的CortexM4F上运行。我担心编译器多久将基于软件的double学放在诸如**float_var1=3.0*int_var/float_var_2;(3.0insteadof3.0f)**我担心我会错过其中一些双常数。我怎样才能找到所有出现的较慢的double学?使用sourceryGCC或IAR禁用double或生成错误/警告即可。请指导我实现目标的正确方法。 最佳答案 HowcanIlocatealloccurrencesofslowerdouble-precisionmath?Disabl

c++ - 使用折叠表达式将参数包扩展到 lambda - gcc vs clang

考虑以下代码片段:templatevoidpost(TF){}templatestructfuncs:TFs...{funcs(TFs...fs):TFs{fs}...{}voidcall(){(post([&]{static_cast(*this)();}),...);}};clang++3.8+successfullycompilesthecode.g++7.0failstocompile出现以下错误:prog.cc:Inlambdafunction:prog.cc:10:43:error:parameterpacksnotexpandedwith'...':(post([&]{s

c++ - gcc-8 -Wstringop-truncation 什么是好的做法?

GCC8添加了一个-Wstringop-truncation警告。来自https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82944:The-Wstringop-truncationwarningaddedinGCC8.0viar254630forbug81117isspecificallyintendedtohighlightlikelyunintendedusesofthestrncpyfunctionthattruncatetheterminatingNULcharcterfromthesourcestring.Anexampleofsuch

c++ - gcc:警告:大整数隐式截断为无符号类型

#includeintmain(){unsignedcharc;c=300;printf("%d",c);return0;}输出是可预测的还是未定义的? 最佳答案 很抱歉第一个回答,这里是C++标准的解释:)Istheoutputinanywaypredictableoritsundefined??这是可以预见的。这段代码有两点需要注意:一、unsignedchar类型不能赋值:unsignedcharc;c=300;3.9.1Fundamentaltypes(Page54)Unsignedintegers,declaredunsi

c++ - Lambda 捕获导致不兼容的操作数类型错误?

考虑以下代码:main(){boolt;...std::functionf=t?[](boolb){returnb;}:[](boolb){return!b;};//OKstd::functionf=t?[t](boolb){returnt==b;}:[t](boolb){returnt!=b;};//error}当使用Clang3.1编译时,非捕获lambda的赋值有效,而捕获的lambda赋值失败:main.cpp:12:36:error:incompatibleoperandtypes(''and'')std::functionf2=t?[t](boolb){returnt==b

c++ - 此类代码中 gcc 和 clang 之间的不同行为

intmain(){std::vectordelimiters={",",";"};std::cout我在gcc和clang之间得到不同的答案clang7.0.0打印出来,gcc8.2.0报错terminatecalledafterthrowinganinstanceof'std::length_error'what():cannotcreatestd::vectorlargerthanmax_size()Aborted哪个编译器是正确的? 最佳答案 两个编译器都是正确的,因为你的代码有未定义的行为。你掉进了陷阱。{",",";"}

c++ - 为什么 gcc 的选项 "-Wstrict-prototypes"对 C++ 无效?

这是一个警告,我和网上的很多人,请参阅在C++代码上运行gcc时:cc1plus:warning:commandlineoption"-Wstrict-prototypes"isvalidforAda/C/ObjCbutnotforC++警告文本非常清楚:'C++'不在集合[Ada/C/ObjC]中,所以我完全不知道为什么gcc在编译C++代码时会发出此警告。(仅供引用,尽管有C++代码,我们仍打开此标志的原因是因为它主要是C代码,我们选择了严格(高级)警告选项列表,但我们添加了一些C++代码。我的问题是:为什么这个警告对C++无效?警告选项的gcc文档,来自http://gcc.gn